package com.sky.orangehireserver.modules.enterprise.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.orangehireserver.modules.enterprise.dto.EnterpriseEmployeeCreateDTO;
import com.sky.orangehireserver.modules.enterprise.dto.EnterpriseEmployeePasswordResetDTO;
import com.sky.orangehireserver.modules.enterprise.dto.EnterpriseEmployeeQueryDTO;
import com.sky.orangehireserver.modules.enterprise.dto.EnterpriseEmployeeUpdateDTO;
import com.sky.orangehireserver.modules.enterprise.vo.EnterpriseEmployeeVO;

import java.util.List;

/**
 * 企业账户管理服务接口
 * 
 * @author sky
 */
public interface EnterpriseAccountService {

    /**
     * 创建企业员工（企业管理员创建HR，HR创建其他员工）
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param createDTO 员工创建请求DTO
     * @return 员工信息VO
     */
    EnterpriseEmployeeVO createEmployee(Long orgId, String currentUserRole, EnterpriseEmployeeCreateDTO createDTO);

    /**
     * 更新企业员工信息
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param updateDTO 员工更新请求DTO
     * @return 员工信息VO
     */
    EnterpriseEmployeeVO updateEmployee(Long orgId, String currentUserRole, EnterpriseEmployeeUpdateDTO updateDTO);

    /**
     * 删除企业员工
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param employeeId 员工ID
     */
    void deleteEmployee(Long orgId, String currentUserRole, Long employeeId);

    /**
     * 根据ID获取企业员工详情
     * 
     * @param orgId 企业ID
     * @param employeeId 员工ID
     * @return 员工信息VO
     */
    EnterpriseEmployeeVO getEmployeeById(Long orgId, Long employeeId);

    /**
     * 分页查询企业员工列表
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param queryDTO 查询条件DTO
     * @return 分页员工信息
     */
    IPage<EnterpriseEmployeeVO> getEmployeePage(Long orgId, String currentUserRole, EnterpriseEmployeeQueryDTO queryDTO);

    /**
     * 启用企业员工
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param employeeId 员工ID
     */
    void enableEmployee(Long orgId, String currentUserRole, Long employeeId);

    /**
     * 禁用企业员工
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param employeeId 员工ID
     */
    void disableEmployee(Long orgId, String currentUserRole, Long employeeId);

    /**
     * 重置企业员工密码
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param resetDTO 密码重置请求DTO
     */
    void resetEmployeePassword(Long orgId, String currentUserRole, EnterpriseEmployeePasswordResetDTO resetDTO);

    /**
     * 批量删除企业员工
     * 
     * @param orgId 企业ID
     * @param currentUserRole 当前用户角色
     * @param employeeIds 员工ID列表
     */
    void batchDeleteEmployees(Long orgId, String currentUserRole, List<Long> employeeIds);

    /**
     * 获取当前用户可管理的角色列表
     * 
     * @param currentUserRole 当前用户角色
     * @return 可管理的角色列表
     */
    List<String> getManageableRoles(String currentUserRole);
}
